{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting started on Using Jupyter Notebooks and Python\n", "\n", "## Learning Objectives\n", "The goal of this notebook is to learn how to use Python for solving chemical engineering problems. We assume that you are familiar with content from APSC 160 (or any other introductory programming courses if you are a transfer student), but have no prior experience with Python.\n", "\n", "By the end of this section, you should be able to:\n", "\n", "1. Understand how to use Jupyter notebooks\n", "2. Write simple Markdown and Python code\n", "\n", "## Introduction and Motivation\n", "\n", "Welcome to **CHBE 241: Material and Energy Balances**!\n", "\n", "In this course, we will use Jupyter notebooks to illustrate how to apply modern, open-source software tools for chemical engineering applications. We will be using Python, a free, open-source and powerful computing environment. It is one of the most popular languages in the data science community alongside R, which you will learn in STAT 241.\n", "\n", "Coding is one of the most useful, transfereable skills that you can learn in the 21st century. According to the [U.S. Department of Labor](https://www.bls.gov/ooh/architecture-and-engineering/chemical-engineers.htm), the chemical engineering industry is projected to grow 2% between 2014-2024. Over the same period, the software industry is projected to grow by a staggering 17%. Software, automation and data science will serve an increasingly important role in the field of chemical engineering. For example, researchers in the [DAIS Lab](http://dais.chbe.ubc.ca/) here in CHBE are investigating applications of machine learning techniques to design better controllers for industrial processes.\n", "\n", "The goal of using Python in this course is to provide you with a gentle introduction to the language of modern software development and equip you with the necessary foundations to pursue further explore this area if you are interested in learning more.\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running Jupyter Notebooks\n", "Jupyter notebooks are documents that combines Python code, text, equations and images. These notebooks are meant to be accessed through a browser. They are easily shareable and downloadable into other file types (e.g. PDF and HTML) for your convenience. \n", "\n", "To interact with and edit these notebooks, you will need to open them using a Jupyter server. In this course, we will use a Jupyter server hosted by UBC at [https://ubc.syzygy.ca/](https://ubc.syzygy.ca/). \n", "\n", "### Running Jupyter on the Cloud: [Syzygy](https://ubc.syzygy.ca/)\n", " 1. Go to the Syzygy server in the link above \n", " 2. Sign in to Syzygy with your CWL login \n", " 3. Click \"Start My Server\" and the Jupyter interface will open\n", " 4. Go to File > New > Python3 and create a new file \n", "![](../figures/Module-0/newnotebook_rwest.gif)\n", " 5. Enter this into the box `!git clone https://github.com/UBCEnvision/CHBE241` and press \"Shift+Enter\" \n", " 6. Go to File > Open and you should see the course syllabus downloaded into a folder called **CHBE241**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Jupyter\n", "\n", "A notebook consists of **cells** that contain either **text** or **code**. Cells that contain text are known as **Markdown** cells, and they can support formatted text, images, HTML and equations written in $ \\LaTeX $. To swtich between Markdown and code in each cell, use the dropdown menu at the top of the page.\n", "\n", "Let's take a few minutes to familiarize ourselves with Jupyter. The Jupyter interface is very user-friendly and the best way to learn is to explore by clicking on different buttons. Try doing the following:\n", "\n", "1. Take a look at the course materials and observe the different folders and files\n", "2. Create a new Python 3 notebook \n", "3. Rename the notebook and save it\n", "\n", "Jupyter notebooks have a **```.ipynb```** extension with a notebook icon beside the filename." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Edit Mode and Command Mode\n", "\n", "There are 2 modes in Jupyter notebooks: edit mode and command mode.\n", "\n", "Edit mode is indicated by a green cell border and a prompt showing in the editor area:\n", "\n", "![Edit Mode](../figures/Module-0/edit_mode.png)\n", "\n", "When a cell is in edit mode, you can type into the cell, like a normal text editor. Enter edit mode by pressing `Enter` or using the mouse to double click on a cell.\n", "\n", "Command mode is indicated by a grey cell border with a blue left margin:\n", "\n", "![Edit Mode](../figures/Module-0/command_mode.png)\n", "\n", "When you are in command mode you will be able to perform operations on cells like copy, paste and delete but not type into individual cells. Enter command mode by pressing `Esc`. \n", "\n", "Here are some of the shortcuts available in command mode:\n", "\n", "| Command Mode Action | Shortcut |\n", "| :---: | :---: |\n", "| Insert empty cell above | `a` |\n", "| Insert empty cell below | `b` |\n", "| Copy cell | `c` |\n", "| Cut cell | `x` |\n", "| Paste cell below | `v` |\n", "| To code | `y` |\n", "| To markdown | `m` |\n", "| Save and checkpoint | `s` |" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Python Code\n", "\n", "We will start with some basic variable assignment and printing in Python. Create a new notebook, enter edit mode then write this in the cell:\n", "\n", "```Python\n", "x = 3\n", "```\n", "\n", "and then hit *Shift+Enter*. \n", "\n", "Make sure you use **Shift+Enter**. If you just hit Enter you'll find that it will simply add another line to the current cell. In this new cell, we can print out the value using:\n", "\n", "```Python\n", "print(x)\n", "```\n", "\n", "and then hit **Shift+Enter**. The output of that command is printed immediately below the cell.\n", "\n", "The whole procedure should look something like this:\n", "\n", "![runandprint](../figures/Module-0/GIF2.gif)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overwriting variables\n", "\n", "Since each cell is interacting with the same Python instance, if we give `x` a new value and then enter `print(x)` we'll get that new value. That's pretty straight forward —but what if we then delete the cell where we gave `x` a new value?\n", "\n", "Let's take a look!\n", "\n", "![overwrite](../figures/Module-0/GIF3.gif)\n", "\n", "Even though we deleted the cell where we assigned `x = 7`, the assignment is still valid. In fact, the assignment will remain valid until we explicitly execute a cell that sets x equal to a new value, or until we completely restart this Jupyter Notebook instance.\n", "\n", "If you move cells around or execute them in a nosequential order, you might confuse yourself (and others). To start again and clear things up, use the button or the Kernel menu to clear outputs and restart the kernel, then choose \"Run All\" from the Cell menu." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Basic Arithmetic\n", "\n", "Python can easily perform basic arithmetic operations.\n", "\n", "Using Python is as simple as $1+1$:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1+1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also assign numbers to variables:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x + y = 7\n", "x * y = 12\n", "x ^ y = 81\n", "x / y = 0.75\n" ] } ], "source": [ "x = 3\n", "y = 4\n", "print (\"x + y = \", x + y)\n", "print (\"x * y = \", x*y)\n", "print (\"x ^ y = \", x**y )\n", "print (\"x / y = \", x/y) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Numpy\n", "\n", "More advanced functions require a numerical computation library called Numpy (numerical Py). We will be using this library in almost every notebook.\n", "\n", "When using functions in the numpy library, you must first import the library using the following command: \n", "\n", "```Python\n", "import numpy as np\n", "```\n", "\n", "In the code above, `numpy` is the name of the library that we are importing. `np` is just the name of a variable that we are assigning the library to. Assigning a variable is optional and just a matter of convenience. It makes our code look cleaner and easier to type if the name of the library is long. \n", "\n", "For example, here's how to print the value of $\\cos(\\pi)$ and $\\sin\\big(\\frac{\\pi}{2}\\big)$ using `numpy`:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-1.0\n", "1.0\n" ] } ], "source": [ "import numpy as np\n", "\n", "x = np.pi\n", "print (np.cos(x))\n", "print (np.sin(0.5*x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Markdown Math\n", "Markdown can be used to render nice $\\LaTeX$-styled equations. For example, here's the Thiele modulus written in $\\LaTeX$: $\\Phi=\\frac{R}{3}\\sqrt{\\frac{V_\\text{M}}{K_M\\cdot D_eff}}$.\n", "\n", "To write equations in Markdown, first make sure you change your cell type to **Markdown** instead of Code.\n", "\n", "* For inline math, wrap LaTeX inside single dollar signs: `$...$`\n", "* For single-line rendering, wrap LaTeX inside double dollar signs: `$$...$$`\n", "\n", "For example:\n", "\n", "```\n", "$$\n", "f'(a) = \\lim_{x \\to a} \\frac{f(x) - f(a)}{x - a}\n", "$$\n", "```\n", "\n", "Would render as:\n", "\n", "$$\n", "f'(a) = \\lim_{x \\to a} \\frac{f(x) - f(a)}{x - a}\n", "$$\n", "\n", "\n", "![](../figures/Module-0/GIF4.gif)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Using Lists\n", "Lists are a very useful way of organizing data in Python. If you can recall from APSC160, an array is a collection of similar data elements. Lists in Python are very similar to arrays in C. \n", "\n", "Here are some examples:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 4, 6, 8]\n" ] } ], "source": [ "my_numbers = [2, 4, 6, 8]\n", "print(my_numbers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Concatenation is combing two lists together. This is done by using **```+```** operation." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 4, 6, 8, 10, 12, 14]\n" ] } ], "source": [ "a = [2, 4, 6, 8]\n", "b = [10, 12, 14]\n", "\n", "print(a + b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To sum elements in your list, you can do: \n", "\n", "```Python\n", "np.sum(list)\n", "```" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "56\n" ] } ], "source": [ "print(np.sum(a + b))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `For` loops\n", "\n", "For loops can also be used in Python to iterate over a list. For loops work by first typing `for`, then the variable or list your iterating over, then `in`, then the length or list that you want to iterate until. A colon, `:` is used to signify the start of the for loop and everything that is in the for loop needs to be indented using the `TAB` key. \n", "\n", "Here are two examples that will take numbers from a list and print out the square of those numbers. You might be familiar with the `^` symbol as the power operator. In Python, we use `**` as the power operator. To get the square of two, we would write `2**2`.\n", "\n", "Example 1:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = 2 a^2 = 4\n", "a = 4 a^2 = 16\n", "a = 5 a^2 = 25\n", "a = 6 a^2 = 36\n", "a = 8 a^2 = 64\n" ] } ], "source": [ "a = [2, 4, 5, 6, 8]\n", "for i in a:\n", " print(\"a =\", i, \"a^2 =\", i**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Example 2:" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b = 10 b^2 = 100\n", "b = 12 b^2 = 144\n", "b = 14 b^2 = 196\n" ] } ], "source": [ "b = [10, 12, 14]\n", "for i in b:\n", " print(\"b =\", i, \"b^2 =\", i**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see in both examples, `i` iterated through `a` in the first example and `b` in the second example. \n", "\n", "### List Comprehension\n", "\n", "In Python, instead of writing a for loop, we can also use [List Comprehension](http://www.secnetix.de/olli/Python/list_comprehensions.hawk) as a shortcut to perform operations on elements in a list. Click on the link to find out more.\n", "\n", "Here's an example of using list comprehension to square the numbers in a list:\n", "\n", "```Python\n", "a_squared = [x**2 for x in a]\n", "```\n", "\n", "Let's break it down into 2 parts, we'll start with the second half of the statement:\n", "\n", "```Python\n", "for x in a\n", "```\n", "\n", "means that we are taking each element in the list `a`, and assigning it to `x`\n", "\n", "In the first half of the statement, we tell Python what we want to do with `x`:\n", "\n", "```Python\n", "x**2\n", "```\n", "\n", "would square the number in `x`.\n", "\n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[4, 16, 36, 64]\n" ] } ], "source": [ "# Using list comprehension to square numbers in list a\n", "a_squared = [x**2 for x in a]\n", "print(a_squared)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 4, 6, 8]\n" ] } ], "source": [ "# Using list comprehension to return only even numbers in list a\n", "a_squared = [x for x in a if (x % 2 == 0)]\n", "print(a_squared)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Dictionaries\n", "Just like lists, dictionaries are another type of useful data structure in Python. They work by having key-value pairs. It is common to have the key as a string and numbers as the values. Dictionaries are useful for storing and retrieving data. \n", "\n", "A **key** is something we can use to lookup values of interest. For example, in an actual dictionary, a key would be an unfamiliar word that we are interested in looking up, and the value would be the dictionary entry explaining the meaning of the word.\n", "\n", "Just like an actual dictionary, where no words are repeated, **keys are always unique in Python dictionaries**.\n", "\n", "Here is an example of atoms and the number of protons associated with that atom. The keys are the element names as a string, the values are the proton numbers, and our dictionary is called `number_of_protons`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'Pb': 72, 'H': 1, 'F': 9, 'C': 6, 'Fe': 26}\n" ] } ], "source": [ "number_of_protons = {'Pb' : 72,'H' : 1, 'F' : 9,'C' : 6, 'Fe' : 26}\n", "print(number_of_protons)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You may have noticed that we made a mistake with the number of protons that lead has. It should be 82 instead of 72.\n", "\n", "Rather than rewriting the whole dictionary, we can change a single key's value using this syntax:\n", "\n", "```Python\n", "number_of_protons['key'] = new_value\n", "```" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'Pb': 82, 'H': 1, 'F': 9, 'C': 6, 'Fe': 26}\n" ] } ], "source": [ "number_of_protons['Pb'] = 82\n", "print(number_of_protons)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that the dictionary is fixed, let's add another atom, Radon." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'Pb': 82, 'H': 1, 'F': 9, 'C': 6, 'Fe': 26, 'Rn': 86}\n" ] } ], "source": [ "number_of_protons['Rn'] = 86\n", "print(number_of_protons)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can easily get all key-value pairs in a dictionary using a for loop." ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of protons in Pb is 82.00 \n", "The number of protons in H is 1.00 \n", "The number of protons in F is 9.00 \n", "The number of protons in C is 6.00 \n", "The number of protons in Fe is 26.00 \n", "The number of protons in Rn is 86.00 \n" ] } ], "source": [ "for atoms in number_of_protons.keys():\n", " print(\"The number of protons in {:" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "%matplotlib inline\n", "\n", "x = np.linspace(0.01,2)\n", "y = np.exp(x)\n", "z = np.log(x)\n", "\n", "plt.plot(x, y, 'b', x, z, 'r')\n", "plt.xlabel('x');\n", "plt.ylabel('f(x)');\n", "plt.title('Plotting e^(x) and ln(x)')\n", "plt.legend(['e^(x)','ln(x)'])\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-0.050000000000000003, 1.05, -0.049999999999999933, 1.05)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0,np.pi/2)\n", "a = np.sin(x)\n", "b = np.cos(x)\n", "plt.plot(a,b)\n", "plt.axis('equal')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-0.049974310810034395,\n", " 1.0494605270107222,\n", " -1.1000000000000001,\n", " 1.1000000000000001)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0,np.pi)\n", "a = np.sin(x)\n", "b = np.cos(x)\n", "plt.plot(a,b)\n", "plt.axis('equal')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-1.0994348378207568,\n", " 1.0994348378207568,\n", " -1.0978426623878532,\n", " 1.0998972696375169)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nlFKqk/8PLGeQ9+9dQisAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0,2*np.pi)\n", "a = np.sin(x)\n", "b = np.cos(x)\n", "plt.plot(a,b)\n", "plt.axis('equal')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0.01,2)\n", "plt.subplot(2,1,1)\n", "plt.plot(x,y)\n", "plt.title('e^(x)')\n", "\n", "plt.subplot(2,1,2)\n", "plt.plot(x,z)\n", "plt.title('ln(x)')\n", "plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solving Equations\n", "One of the best features of Python is its massive amounts of libraries to extend its functionallity. Here is an example of solving some algebraic equations using the **`sympy`** library." ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5605.67293/V\n", "5605.67293/P\n", "46327.8754545455\n" ] } ], "source": [ "import sympy as sym\n", "\n", "sym.var('P V n R T');\n", "\n", "# Gas constant\n", "R = 8.314 #J/K*mol\n", "\n", "#Moles of Helium\n", "n = 2.3 #Moles\n", "\n", "#Temperature\n", "T = 293.15 #Kelvin\n", "\n", "#Equation\n", "eqn = sym.Eq(P*V,n*R*T)\n", "\n", "#Solve for P\n", "f1 = sym.solve(eqn,P)\n", "print(f1[0])\n", "\n", "#Solve for V\n", "f2 = sym.solve(eqn,V)\n", "print(f2[0])\n", "\n", "#Give value for V\n", "V = 0.121\n", "eqn = sym.Eq(P*V,n*R*T)\n", "\n", "#Solve for P again\n", "f3 = sym.solve(eqn,P)\n", "print(f3[0])" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "
\n", "### Credits\n", "\n", "This notebook uses material from the following sources:\n", "\n", "- https://github.com/rwest/CHME4510/\n", "- https://github.com/jckantor/CBE20255\n", "- https://github.com/patrickwalls/arc-summer-school/" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }